<template>
  <div>
    <!-- 挂载echart的节点 必须有宽高 -->
    <div ref="container" style="width:400px;height:300px;" />
  </div>
</template>

<script>
/**
 1. 根据官方文档配合vue实现最简化的demo渲染
    1. 图表的初始化位置 一定要放到mounted进行执行
    2. 图表的渲染挂载节点必须具有显示的宽高
    3. 在vue中通常我们会封装一个单独的method 里面包含复杂的初始化代码
    然后mounted中只负责调用函数即可

  2. 图表的参数配置化
  场景: 业务中的图标组件很可能会被复用多次 都是雷达图 但是要渲染的数据是不一样的
  要把那些可能随着业务的不同 传入不同的参数的地方变成props
 */
import * as echarts from 'echarts'

// 在methods选项中 创建一个用来初始化echart的方法
// mounted中调用这个初始化的方法进行渲染

export default {
  name: 'Radar',
  props: {
    title: {
      type: String,
      default: ''
    }
  },
  watch: {
    title() {
      // 合并老参数和新参数进行修改操作
      this.myChart.setOption({
        ...this.option,
        title: {
          text: this.title
        }
      })
    }
  },
  mounted() {
    this.initChart()
  },
  methods: {
    initChart() {
      // 获取一个原生的dom节点 原生的api -> vue中获取一个原生的dom -> ref
      const chartDom = this.$refs.container
      // 调用init方法 得到的是一个echart的实例对象
      this.myChart = echarts.init(chartDom)
      // 准备图表的参数
      this.option = {
        title: {
          text: this.title // 改造成prop传入 变成活的
        },
        // 关闭图例
        // legend: {
        //   data: ['Allocated Budget', 'Actual Spending']
        // },
        radar: {
          // shape: 'circle',
          indicator: [
            { name: 'Sales', max: 6500 },
            { name: 'Administration', max: 16000 },
            { name: 'Information Technology', max: 30000 },
            { name: 'Customer Support', max: 38000 },
            { name: 'Development', max: 52000 },
            { name: 'Marketing', max: 25000 }
          ]
        },
        series: [
          {
            name: 'Budget vs spending',
            type: 'radar',
            data: [
              {
                value: [4200, 3000, 20000, 35000, 50000, 18000],
                name: 'Allocated Budget'
              },
              {
                value: [5000, 14000, 28000, 26000, 42000, 21000],
                name: 'Actual Spending'
              }
            ]
          }
        ]
      }
      // 调用echart的实例方法 setOption 让参数在图表中渲染显示
      // option && myChart.setOption(option)
      this.option && this.myChart.setOption(this.option)
    }
  }
}
</script>
